package org.lora.webframework.common;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.lora.core.mybatis.Page;
import org.lora.log4j.Log4jUtil;
import org.lora.mvc.LoraBaseAction;
import org.lora.util.StringUtil;

import com.alibaba.fastjson.JSONObject;

/**
 * <p>
 * Title:WebframeBaseAction
 * </p>
 * <p>
 * Desription:所有Lora框架内的Action的基类
 * </p>
 * Create Time:2016年7月7日 下午7:18:14
 * 
 * @author Bladnir@outlook.com
 *         <p>
 *         History:
 *         </p>
 *         2016年7月7日 Bladnir Create</br>
 */
public class WebframeBaseAction extends LoraBaseAction {

	/**
	 * 日志对象
	 */
	protected Logger businessLogger = Log4jUtil.getBusinessLogger();

	/**
	 * 封装request中的参数 到map当中
	 * 
	 * 如果参数名 在request中没有对应的参数值 则 不封装到 map当中
	 * 
	 * @param request
	 * @param parameterNameArray
	 *            参数名 数组
	 * @param isKickEmpty
	 *            是否去除参数值中的空格 ture 去掉空格 false 不去掉空格
	 * @return
	 */
	protected Map<String, Object> packageParameterMapFromRequest(HttpServletRequest request, String[] parameterNameArray,
			boolean isKickEmpty) {
		if (parameterNameArray == null || parameterNameArray.length == 0) {
			return null;
		}

		Map<String, Object> resultMap = new HashMap<>();

		for (String name : parameterNameArray) {
			String value = request.getParameter(name);
			if (StringUtil.isNotNull(value)) {
				// 参数去空格
				if (isKickEmpty) {
					value = value.replace(" ", "");
				}
				resultMap.put(name, value);
			}
		}

		return resultMap;
	}

	/**
	 * 获取lora.tablegrid.js的分页Bean
	 * 
	 * @param request
	 * @return
	 */
	protected Page getPageBean(HttpServletRequest request) {
		String currentPage = request.getParameter("currentPage");
		String pageSize = request.getParameter("pageSize");
		Page page = new Page();
		page.setPageNumber(Integer.valueOf(currentPage));
		page.setPageSize(Integer.valueOf(pageSize));

		return page;

	}

	/**
	 * 装配lora.tablegrid.js 插件需要的数据
	 * 
	 * @param list
	 * @param count
	 * @param dataMap
	 */
	protected void packageLoraTablegridData(List<?> list, int count, Map<String, Object> dataMap) {
		dataMap.put("tableData", list);
		dataMap.put("count", count);
	}

	/**
	 * 从Map中获取字符串
	 * 
	 * @param key
	 * @param map
	 * @return
	 */
	protected String getStringFromMap(String key, Map<String, Object> map) {

		if (StringUtil.isNull(key) || map == null || map.isEmpty()) {
			return null;
		}

		if (map.containsKey(key)) {
			Object value = map.get(key);
			if (StringUtil.isNotNull(value)) {
				return value.toString();
			} else {
				return null;
			}
		} else {
			return null;
		}

	}

	/**
	 * 从json对象中获取值
	 * 
	 * @param key
	 * @param jsonObject
	 * @param defaultValue
	 * @return
	 */
	protected String getStringFromJSONObject(String key, JSONObject jsonObject, String defaultValue) {
		if (StringUtil.isNull(key) || jsonObject == null || jsonObject.isEmpty()) {
			return defaultValue;
		}

		if (jsonObject.containsKey(key)) {

			return jsonObject.getString(key);

		} else {
			return defaultValue;
		}
	}

}
